package com.atguigu1.connection;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import org.junit.Test;

public class ConnectionTest {
	//方式一：
	@Test
	public void test1() throws SQLException
	{
		//获取driver实现类对象
		Driver driver = new com.mysql.jdbc.Driver();
		String url = "jdbc:mysql://localhost:13306/test";
		Properties info = new Properties();
		//将用户名和密码封装在properties中
		info.setProperty("user", "root");
		info.setProperty("password","020708");
		Connection conn = driver.connect(url, info);
		System.out.println(conn);
	}
	
	
	//方式二：对方式一的迭代
	@Test
	public void test2() throws Exception
	{
		//1.获取driver的实现类对象：使用反射
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clazz.newInstance();
		
		//2.提供要连接的数据库
		String url = "jdbc:mysql://localhost:13306/test";
		
		//3.提供连接需要的用户名和密码
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "020708");
		
		//4.获取连接
		Connection conn = driver.connect(url, info);
		System.out.println(conn);
	}
	
	
	//方式三：使用DriverManager替换Driver
	@Test
	public void test3() throws Exception
	{
		//1.获取Driver的实现类对象：使用反射
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clazz.newInstance();
		
		//2.提供另外三个连接的基本信息
		String url = "jdbc:mysql://localhost:13306/test";
		String user = "root";
		String password = "020708";
		
		//3.注册驱动
		DriverManager.registerDriver(driver);
		
		//4.获取连接
		Connection conn = DriverManager.getConnection(url,user,password);
		System.out.println(conn);
	}
	
	
	//方式四：可以只是加载驱动，不再显示的注册驱动。
	@Test
	public void test4() throws Exception
	{
		//1.提供另外三个连接的基本信息
		String url = "jdbc:mysql://localhost:13306/test";
		String user = "root";
		String password = "020708";
		
		//2.获取Driver的实现类对象：使用反射
		Class.forName("com.mysql.jdbc.Driver");
		//相较于方式三：可以省略一下步骤
//		Driver driver = (Driver)clazz.newInstance();
		//注册驱动
//		DriverManager.registerDriver(driver);
		//为什么可以省略以上步骤呢？
		//再静态代码块中作了注册驱动操作

		//4.获取连接
		Connection conn = DriverManager.getConnection(url,user,password);
		System.out.println(conn);
	}
	
	
	//方式五(最终版)：将数据库连接需要的4个基本信息声明在配置文件中，通过读取配置文件的方式，获取连接
	@Test
	public void test5() throws Exception
	{
		//1.读取配置文件中的4个基本信息
		//方式一：FileReader fr = new FileReader(new File("src//jdbc.properties"));
		//方式二：
		InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties pros = new Properties();
		//pros.load(fr);
		pros.load(is);
		
		String user = pros.getProperty("user");
		String password=pros.getProperty("password");
		String url=pros.getProperty("url");
		String driverClass=pros.getProperty("driverClass");
		
		//2.加载驱动：
		Class.forName(driverClass);
		
		//3.获取连接
		Connection conn=DriverManager.getConnection(url,user,password);
		System.out.println(conn);
	}
}
